home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / Resources.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  14KB  |  443 lines

  1. /*
  2.      File:        Resources.h
  3.  
  4.      Contains:    Resource Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __RESOURCES__
  19. #define __RESOURCES__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __MIXEDMODE__
  25. #include <MixedMode.h>
  26. #endif
  27. #ifndef __FILES__
  28. #include <Files.h>
  29. #endif
  30. #if FOR_SYSTEM8_COOPERATIVE
  31. #ifndef __FILEMANAGERTYPES__
  32. #include <FileManagerTypes.h>
  33. #endif
  34. #endif
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif
  39.  
  40. #if PRAGMA_IMPORT_SUPPORTED
  41. #pragma import on
  42. #endif
  43.  
  44. #if PRAGMA_ALIGN_SUPPORTED
  45. #pragma options align=mac68k
  46. #endif
  47.  
  48. /*
  49.     InitResources and RsrcZoneInit are no longer needed in Copland.
  50.  *    CFM provides the necessary run time initialization entry points.
  51. */
  52. #if FOR_SYSTEM7_ONLY
  53. extern pascal short InitResources(void )
  54.  ONEWORDINLINE(0xA995);
  55.  
  56. extern pascal void RsrcZoneInit(void )
  57.  ONEWORDINLINE(0xA996);
  58.  
  59. #endif
  60. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  61.  
  62. enum {
  63.     resSysHeap                    = 64,                            /*System or application heap?*/
  64.     resPurgeable                = 32,                            /*Purgeable resource?*/
  65.     resLocked                    = 16,                            /*Load it in locked?*/
  66.     resProtected                = 8,                            /*Protected?*/
  67.     resPreload                    = 4,                            /*Load in on OpenResFile?*/
  68.     resChanged                    = 2,                            /*Resource changed?*/
  69.     mapReadOnly                    = 128,                            /*Resource file read-only*/
  70.     mapCompact                    = 64,                            /*Compact resource file*/
  71.     mapChanged                    = 32,                            /*Write map out at update*/
  72.     resSysRefBit                = 7,                            /*reference to system/local reference*/
  73.     resSysHeapBit                = 6,                            /*In system/in application heap*/
  74.     resPurgeableBit                = 5,                            /*Purgeable/not purgeable*/
  75.     resLockedBit                = 4,                            /*Locked/not locked*/
  76.     resProtectedBit                = 3,                            /*Protected/not protected*/
  77.     resPreloadBit                = 2,                            /*Read in at OpenResource?*/
  78.     resChangedBit                = 1,                            /*Existing resource changed since last update*/
  79.     mapReadOnlyBit                = 7,                            /*is this file read-only?*/
  80.     mapCompactBit                = 6,                            /*Is a compact necessary?*/
  81.     mapChangedBit                = 5,                            /*Is it necessary to write map?*/
  82.     kResFileNotOpened            = -1,                            /*ref num return as error when opening a resource file*/
  83.     kSystemResFile                = 0                                /*this is the default ref num to the system file*/
  84. };
  85.  
  86. /*
  87.         This ProcPtr uses register based parameters on the 68k and cannot
  88.         be written in or called from a high-level language without the help of
  89.         mixed mode or assembly glue.
  90.  
  91.             typedef pascal void (*ResErrProcPtr)(OSErr thErr);
  92.  
  93. */
  94.  
  95. #if GENERATINGCFM
  96. typedef UniversalProcPtr ResErrUPP;
  97. #else
  98. typedef Register68kProcPtr ResErrUPP;
  99. #endif
  100.  
  101. enum {
  102.     uppResErrProcInfo = kRegisterBased
  103.          | REGISTER_ROUTINE_PARAMETER(1, kRegisterD0, SIZE_CODE(sizeof(OSErr)))
  104. };
  105.  
  106. #if GENERATINGCFM
  107. #define NewResErrProc(userRoutine)        \
  108.         (ResErrUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppResErrProcInfo, GetCurrentArchitecture())
  109. #else
  110. #define NewResErrProc(userRoutine)        \
  111.         ((ResErrUPP) (userRoutine))
  112. #endif
  113.  
  114. #if GENERATINGCFM
  115. #define CallResErrProc(userRoutine, thErr)        \
  116.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppResErrProcInfo, (thErr))
  117. #else
  118. /* (*ResErrUPP) cannot be called from a high-level language without the Mixed Mode Manager */
  119. #endif
  120. #endif
  121. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  122. extern pascal void CloseResFile(short refNum)
  123.  ONEWORDINLINE(0xA99A);
  124.  
  125. extern pascal short ResError(void )
  126.  ONEWORDINLINE(0xA9AF);
  127.  
  128. extern pascal short CurResFile(void )
  129.  ONEWORDINLINE(0xA994);
  130.  
  131. extern pascal short HomeResFile(Handle theResource)
  132.  ONEWORDINLINE(0xA9A4);
  133.  
  134. extern pascal void CreateResFile(ConstStr255Param fileName)
  135.  ONEWORDINLINE(0xA9B1);
  136.  
  137. extern pascal short OpenResFile(ConstStr255Param fileName)
  138.  ONEWORDINLINE(0xA997);
  139.  
  140. extern pascal void UseResFile(short refNum)
  141.  ONEWORDINLINE(0xA998);
  142.  
  143. extern pascal short CountTypes(void )
  144.  ONEWORDINLINE(0xA99E);
  145.  
  146. extern pascal short Count1Types(void )
  147.  ONEWORDINLINE(0xA81C);
  148.  
  149. extern pascal void GetIndType(ResType *theType, short index)
  150.  ONEWORDINLINE(0xA99F);
  151.  
  152. extern pascal void Get1IndType(ResType *theType, short index)
  153.  ONEWORDINLINE(0xA80F);
  154.  
  155. extern pascal void SetResLoad(Boolean load)
  156.  ONEWORDINLINE(0xA99B);
  157.  
  158. extern pascal short CountResources(ResType theType)
  159.  ONEWORDINLINE(0xA99C);
  160.  
  161. extern pascal short Count1Resources(ResType theType)
  162.  ONEWORDINLINE(0xA80D);
  163.  
  164. extern pascal Handle GetIndResource(ResType theType, short index)
  165.  ONEWORDINLINE(0xA99D);
  166.  
  167. extern pascal Handle Get1IndResource(ResType theType, short index)
  168.  ONEWORDINLINE(0xA80E);
  169.  
  170. extern pascal Handle GetResource(ResType theType, short theID)
  171.  ONEWORDINLINE(0xA9A0);
  172.  
  173. extern pascal Handle Get1Resource(ResType theType, short theID)
  174.  ONEWORDINLINE(0xA81F);
  175.  
  176. extern pascal Handle GetNamedResource(ResType theType, ConstStr255Param name)
  177.  ONEWORDINLINE(0xA9A1);
  178.  
  179. extern pascal Handle Get1NamedResource(ResType theType, ConstStr255Param name)
  180.  ONEWORDINLINE(0xA820);
  181.  
  182. extern pascal void LoadResource(Handle theResource)
  183.  ONEWORDINLINE(0xA9A2);
  184.  
  185. extern pascal void ReleaseResource(Handle theResource)
  186.  ONEWORDINLINE(0xA9A3);
  187.  
  188. extern pascal void DetachResource(Handle theResource)
  189.  ONEWORDINLINE(0xA992);
  190.  
  191. extern pascal short UniqueID(ResType theType)
  192.  ONEWORDINLINE(0xA9C1);
  193.  
  194. extern pascal short Unique1ID(ResType theType)
  195.  ONEWORDINLINE(0xA810);
  196.  
  197. extern pascal short GetResAttrs(Handle theResource)
  198.  ONEWORDINLINE(0xA9A6);
  199.  
  200. extern pascal void GetResInfo(Handle theResource, short *theID, ResType *theType, Str255 name)
  201.  ONEWORDINLINE(0xA9A8);
  202.  
  203. extern pascal void SetResInfo(Handle theResource, short theID, ConstStr255Param name)
  204.  ONEWORDINLINE(0xA9A9);
  205.  
  206. extern pascal void AddResource(Handle theData, ResType theType, short theID, ConstStr255Param name)
  207.  ONEWORDINLINE(0xA9AB);
  208.  
  209. extern pascal long GetResourceSizeOnDisk(Handle theResource)
  210.  ONEWORDINLINE(0xA9A5);
  211.  
  212. extern pascal long GetMaxResourceSize(Handle theResource)
  213.  ONEWORDINLINE(0xA821);
  214.  
  215. extern pascal long RsrcMapEntry(Handle theResource)
  216.  ONEWORDINLINE(0xA9C5);
  217.  
  218. extern pascal void SetResAttrs(Handle theResource, short attrs)
  219.  ONEWORDINLINE(0xA9A7);
  220.  
  221. extern pascal void ChangedResource(Handle theResource)
  222.  ONEWORDINLINE(0xA9AA);
  223.  
  224. extern pascal void RemoveResource(Handle theResource)
  225.  ONEWORDINLINE(0xA9AD);
  226.  
  227. extern pascal void UpdateResFile(short refNum)
  228.  ONEWORDINLINE(0xA999);
  229.  
  230. extern pascal void WriteResource(Handle theResource)
  231.  ONEWORDINLINE(0xA9B0);
  232.  
  233. extern pascal void SetResPurge(Boolean install)
  234.  ONEWORDINLINE(0xA993);
  235.  
  236. extern pascal short GetResFileAttrs(short refNum)
  237.  ONEWORDINLINE(0xA9F6);
  238.  
  239. extern pascal void SetResFileAttrs(short refNum, short attrs)
  240.  ONEWORDINLINE(0xA9F7);
  241.  
  242. extern pascal short OpenRFPerm(ConstStr255Param fileName, short vRefNum, SInt8 permission)
  243.  ONEWORDINLINE(0xA9C4);
  244.  
  245. extern pascal Handle RGetResource(ResType theType, short theID)
  246.  ONEWORDINLINE(0xA80C);
  247.  
  248. extern pascal short HOpenResFile(short vRefNum, long dirID, ConstStr255Param fileName, SInt8 permission)
  249.  ONEWORDINLINE(0xA81A);
  250.  
  251. extern pascal void HCreateResFile(short vRefNum, long dirID, ConstStr255Param fileName)
  252.  ONEWORDINLINE(0xA81B);
  253.  
  254. extern pascal short FSpOpenResFile(const FSSpec *spec, SignedByte permission)
  255.  TWOWORDINLINE(0x700D, 0xAA52);
  256.  
  257. extern pascal void FSpCreateResFile(const FSSpec *spec, OSType creator, OSType fileType, ScriptCode scriptTag)
  258.  TWOWORDINLINE(0x700E, 0xAA52);
  259.  
  260. extern pascal void ReadPartialResource(Handle theResource, long offset, void *buffer, long count)
  261.  TWOWORDINLINE(0x7001, 0xA822);
  262.  
  263. extern pascal void WritePartialResource(Handle theResource, long offset, const void *buffer, long count)
  264.  TWOWORDINLINE(0x7002, 0xA822);
  265.  
  266. extern pascal void SetResourceSize(Handle theResource, long newSize)
  267.  TWOWORDINLINE(0x7003, 0xA822);
  268.  
  269. extern pascal Handle GetNextFOND(Handle fondHandle)
  270.  TWOWORDINLINE(0x700A, 0xA822);
  271.  
  272. /*
  273.  Use TempInsertROMMap to force the ROM resource map to be
  274.    inserted into the chain in front of the system. Note that
  275.    this call is only temporary - the modified resource chain
  276.    is only used for the next call to the resource manager.
  277.    See IM IV 19 for more information. 
  278. */
  279. extern pascal void TempInsertROMMap(Boolean tempResLoad);
  280.  
  281. #if CGLUESUPPORTED
  282. extern Handle getnamedresource(ResType theType, const char *name);
  283.  
  284. extern Handle get1namedresource(ResType theType, const char *name);
  285.  
  286. extern short openrfperm(const char *fileName, short vRefNum, char permission);
  287.  
  288. extern short openresfile(const char *fileName);
  289.  
  290. extern void createresfile(const char *fileName);
  291.  
  292. extern void getresinfo(Handle theResource, short *theID, ResType *theType, char *name);
  293.  
  294. extern void setresinfo(Handle theResource, short theID, const char *name);
  295.  
  296. extern void addresource(Handle theResource, ResType theType, short theID, const char *name);
  297.  
  298. #endif
  299. #if OLDROUTINENAMES
  300. #define SizeResource(theResource) GetResourceSizeOnDisk(theResource)
  301. #define MaxSizeRsrc(theResource) GetMaxResourceSize(theResource)
  302. #define RmveResource(theResource) RemoveResource(theResource)
  303. #endif
  304. #endif
  305. typedef short ResFileRefNum;
  306. typedef short ResID;
  307. typedef short ResAttributes;
  308. typedef short ResFileAttributes;
  309.  
  310. enum {
  311.     kResFileReadOnlyPermission    = 100,
  312.     kResFileReadWriteExclusivePermission = 101
  313. };
  314.  
  315. typedef UInt32 ResFilePermissions;
  316. #if FOR_SYSTEM8_COOPERATIVE
  317. extern OSStatus RMRemoveResFileFromSearchPath(ResFileRefNum refNum);
  318.  
  319. extern OSStatus RMAddResFileToSearchPath(ResFileRefNum refNum);
  320.  
  321. /*
  322.  *    New API returning OSStatus, rolling in low mem, and fixing
  323.  *    some sins of the past.
  324.  *
  325. */
  326. extern OSStatus RMCreateResFile(FSObjectRef fsFolderObjectRef, FSName fsName, OSType creator, OSType theType);
  327.  
  328. extern OSStatus RMOpenResFile(FSObjectRef specification, ResFilePermissions permissions, Boolean resLoad, ResFileRefNum *refNum);
  329.  
  330. extern OSStatus RMCloseResFile(ResFileRefNum refNum);
  331.  
  332. extern OSStatus RMUpdateResFile(ResFileRefNum refNum);
  333.  
  334. extern OSStatus RMUseResFile(ResFileRefNum refNum);
  335.  
  336. extern OSStatus RMCurResFile(ResFileRefNum *refNum);
  337.  
  338. /*
  339.  *    We don't want to support resource file attributes other then
  340.  *    the readOnly bit.  Access to the readOnly bit is now gained
  341.  *    through the calls RMSetResFileReadOnlyState and RMGetResFileReadOnlyState.
  342.  *
  343.  *    So, for now, we will not support RMGetResFileAttrs and RMSetResFileAttrs.
  344.  *
  345.  *  OSStatus RMGetResFileAttrs(ResFileRefNum refNum, ResFileAttributes * attributes);
  346.  *  OSStatus RMSetResFileAttrs(ResFileRefNum refNum, ResFileAttributes attributes);
  347. */
  348. extern OSStatus RMHomeResFile(Handle theResource, ResFileRefNum *refNum);
  349.  
  350. extern OSStatus RMAddResource(Handle theData, ResType theType, ResID theID, ConstStr255Param name);
  351.  
  352. extern OSStatus RMRemoveResource(Handle theResource);
  353.  
  354. extern OSStatus RMCountTypes(Boolean oneDeep, UInt32 *count);
  355.  
  356. extern OSStatus RMGetIndexedType(UInt32 index, Boolean oneDeep, ResType *theType);
  357.  
  358. extern OSStatus RMCountResources(ResType theType, Boolean oneDeep, UInt32 *count);
  359.  
  360. extern OSStatus RMGetIndexedResource(ResType theType, UInt32 index, Boolean oneDeep, Boolean resLoad, Handle *handle);
  361.  
  362. extern OSStatus RMGetResource(ResType theType, ResID theID, Boolean oneDeep, Boolean resLoad, Handle *handle);
  363.  
  364. extern OSStatus RMGetNamedResource(ResType theType, ConstStr255Param name, Boolean oneDeep, Boolean resLoad, Handle *handle);
  365.  
  366. extern OSStatus RMLoadResource(Handle theResource);
  367.  
  368. extern OSStatus RMReleaseResource(Handle theResource);
  369.  
  370. extern OSStatus RMDetachResource(Handle theResource);
  371.  
  372. extern OSStatus RMChangedResource(Handle theResource);
  373.  
  374. extern OSStatus RMWriteResource(Handle theResource);
  375.  
  376. extern OSStatus RMSetResourceSize(Handle theResource, SInt32 newSize);
  377.  
  378. extern OSStatus RMUniqueID(ResType theType, Boolean oneDeep, ResID *idPtr);
  379.  
  380. extern OSStatus RMGetResAttributes(Handle theResource, ResAttributes *attributes);
  381.  
  382. extern OSStatus RMGetResInfo(Handle theResource, ResType *typePtr, ResID *idPtr, Str255 name);
  383.  
  384. extern OSStatus RMSetResInfo(Handle theResource, ResType theType, ResID theID, ConstStr255Param name);
  385.  
  386. extern OSStatus RMSetResAttributes(Handle theResource, ResAttributes attrs);
  387.  
  388. extern OSStatus RMReadPartialResource(Handle theResource, UInt32 offset, void *buffer, UInt32 count);
  389.  
  390. extern OSStatus RMWritePartialResource(Handle theResource, UInt32 offset, const void *buffer, UInt32 count);
  391.  
  392. /*
  393.  * GetResourceSize returns either the size of the handle if the handle
  394.  * is not empty or the size of the resource as stored on disk (i.e.
  395.  * it has the exact semantics of GetResourceSizeOnDisk but does not
  396.  * have the confusing name).
  397. */
  398. extern OSStatus RMGetResourceSize(Handle theResource, SInt32 *size);
  399.  
  400. extern OSStatus RMSetResErrProc(ResErrUPP proc);
  401.  
  402. /*
  403.  *    For now, we don't know if we want to support the purge
  404.  *    proc in the future... it's an outstanding issue as stated in the
  405.  *    Design Document.
  406.  *
  407.  *    OSStatus RMSetResPurge(Boolean install);
  408. */
  409. /*
  410.  *    The following calls are used to get/set the read only state (i.e. the
  411.  *    mapReadOnly file attribute) of a resource file.  When setting the state,
  412.  *  the state is set both in memory (i.e. taking affect immediately for all
  413.  *    other calls) and on disk (i.e. next time the file is opened, it will
  414.  *    be opened with the read only state set).  The call RMSetResFileReadOnlyState
  415.  *    ignores the current state of the resource file.  Setting the read only
  416.  *    state changes the current resource file attributes of the file both
  417.  *    in memory and on disk as appropriately (i.e. setting/clearing the read only state
  418.  *    will set/clear the mapReadOnly bit in memory and on disk).
  419.  *
  420.  *    The read only state is checked when .... [this needs to be filled in -- it
  421.  *    will be exactly the same as when the mapReadOnly bit is checked].
  422. */
  423. extern OSStatus RMSetResFileReadOnlyState(ResFileRefNum refNum, Boolean isReadOnly);
  424.  
  425. extern OSStatus RMGetResFileReadOnlyState(ResFileRefNum refNum, Boolean *isReadOnly);
  426.  
  427. #endif
  428.  
  429. #if PRAGMA_ALIGN_SUPPORTED
  430. #pragma options align=reset
  431. #endif
  432.  
  433. #if PRAGMA_IMPORT_SUPPORTED
  434. #pragma import off
  435. #endif
  436.  
  437. #ifdef __cplusplus
  438. }
  439. #endif
  440.  
  441. #endif /* __RESOURCES__ */
  442.  
  443.